import fs from 'fs'
import Koa from 'koa'
const PORT = 3000
const cors = require('koa2-cors')
const koaBodyparser = require('koa-bodyparser');
const {connection} = require('./mysql/connection');
// 连接数据库
connection.connect((err:boolean) => {
    if (err) {
        console.log('连接失败，请检查用户名，密码，数据库名称是否正确');
    } else {
        console.log('连接成功');
    }
})

const app = new Koa()
app.use(cors())

// token校验
const koaJwt = require('koa-jwt')
const { PRIVITE_KEY } = require('./token/confirm')

// 需要token鉴权的路由，如果没有在头部传递token，自定义401错误处理，表示没有权限，需要身份认证
app.use((ctx, next) => {
    return next().catch((err) => {
        if (err.status === 401) {
            ctx.status = 401;
            ctx.response.body = {
                code: 401,
                msg: '请重新登录！',
                data: {}
            }
        } else {
            throw err;
        }
    });
});


app.use(koaJwt({
    credentialsRequired: false,
    secret: PRIVITE_KEY,
    algorithms: ['HS256']
}).unless({
    path: ['/public/login','/public/register'] // 白名单，除了这里写的地址，其他的URL都需要进行校验
}))

app.use(koaBodyparser());

// 其他页面通过 router 加载
let urls = fs.readdirSync(__dirname + '/router')
urls.forEach((element) => {
    let module = require(__dirname + '/router/' + element)
    app.use(module.routes()).use(module.allowedMethods());
})

app.listen(PORT, () => {
    console.log(`serve is running, port is ${PORT}`)
})